在日常的运维工作中遇到过这样的情况,一台服务器上新装了两块磁盘,磁盘a(在服务器上显示为sdc)和磁盘b(在服务器上显示为sdd),有一次把这两块磁盘都拔掉了,然后再重新插上,重启机器,结果磁盘编号调换了,a变成了sdd,b变成了sdc(这是因为把磁盘插错了插槽),问题来了。通过上边的学习,你挂载磁盘是通过/dev/hdb1 这样的分区名字来挂载的,如果先前加入到了/etc/fstab 中,结果系统启动后则会挂载错分区。那么怎么样避免这样的情况发生?
这就用到了UUID,可以通过 blkid 命令获取各分区的UUID:
1 2 3 4 5
| /dev/sda1: UUID="a593ff68-2db7-4371-8d8c-d936898e9ac9" TYPE="ext4" /dev/sda2: UUID="ff042a91-b68f-4d64-9759-050c51dc9e8b" TYPE="swap" /dev/sda3: UUID="95297b81-538d-4d96-870a-de90255b74f5" TYPE="ext4" /dev/sdb5: LABEL="TEST" UUID="c61117ca-9176-4d0b-be4d-1b0f434359a7" TYPE="ext4" /dev/sdb6: UUID="c271cb5a-cb46-42f4-9eb4-d2b1a5028e18" SEC_TYPE="ext2" TYPE="ext3"
|
这样可以获得全部磁盘分区的UUID,如果格式化的时候指定了 LABEL 则该命令也会显示LABEL值,甚至连文件系统类型也会显示。当然这个命令后面也可以指定哪个分区:
1 2
| [root@localhost ~] /dev/sdb5: LABEL="TEST" UUID="c61117ca-9176-4d0b-be4d-1b0f434359a7" TYPE="ext4"
|
获得UUID后,如何使用它呢?
1 2 3 4 5 6 7 8
| [root@localhost ~] [root@localhost ~] [root@localhost ~] 文件系统 容量 已用 可用 已用%% 挂载点 /dev/sda3 14G 1.5G 12G 11% / tmpfs 160M 0 160M 0% /dev/shm /dev/sda1 97M 27M 66M 29% /boot /dev/sdb5 989M 18M 921M 2% /newdir
|
也可以把下面这行写到 /etc/fstab 中
1
| UUID=c61117ca-9176-4d0b-be4d-1b0f434359a7 /newdir ext4 defaults 0 0
|
如果想让某个分区开机后就自动挂载,有两个办法可以实现:
- 在 /etc/fstab 中添加一行,如上例中那行;
- 把挂载命令写到 /etc/rc.d/rc.local 文件中去,阿铭会经常把想要开机启动的命令加到这个文件中。系统启动完后会执行这个文件中的命令,所以只要你想开机后运行什么命令统统写入到这个文件下面吧,直接放到最后面即可,阿铭把挂载的命令放到该文件的最后一行了:
1 2 3 4 5 6 7 8 9
| [root@localhost ~] #!/bin/sh touch /var/lock/subsys/local mount UUID="c61117ca-9176-4d0b-be4d-1b0f434359a7" /newdir
|
以上两种方法,任选其一,介绍第二种方法其实也是一个小知识,如何让一些操作行为随系统启动而自动执行。另外一个小建议,那就是挂载磁盘分区的时候,尽量使用UUID或者LABEL这两种方法。